package com.flying.classmember.method;

/**
 * @ClassName: Methoddemo6Test
 * @createDate: 2023/6/21 11:52
 * @author: liu
 * @description:递归练习 1.求1到n的和
 * 2.求斐波那契数列      1、1、2、3、5、8、13、21、34、55、89……
 */
public class Methoddemo6Test {
    public static void main(String[] args) {
        int x = getsum(6);  //  4950
        System.out.println(x);


        int y = getFibonacci(11);
        System.out.println(y);


        int z = getFb(10);
        System.out.println(z);

        int o = getFb(1);
        System.out.println(o);

        int p = getFb(2);
        System.out.println(p);
    }


    //  循环实现
/*    public static int getsum(int i) {
        int sum = 0;
        for (int j = 1; j <= i; j++) {
            sum += j;
        }
        return sum;
    }*/

    //  递归实现
    //  f(n)=n+f(n-1)
    public static int getsum(int i) {
        if(i==0) return 0;
        if (i == 2) return 2;
        return i + getsum(i - 2);
    }


    //  递归实现斐波那契数列
    //  f3=f2+f1 f2=f1+f0
    public static int getFibonacci(int i) {
        //  递归出口  1,1,2,3,5,8,13,   1,1 是递归出口
        if (i == 2 || i == 1) return 1;
        return getFibonacci(i - 1) + getFibonacci(i - 2);
    }

    //  循环求斐波那契数列
    public static int getFb(int n) {
        int num1 = 1;
        int num2 = 1;
        for (int i = 0; i < n-2; i++) {
            int c=num1;
            num1=num2;
            num2=num1+c;
        }
         return num2;
    }


}
